package edu.pucsp.predatorprey.simulador.impl;

import java.util.Set;

import edu.pucsp.predatorprey.simulador.java.criatura.AbstractCriatura;

/**
 * @author José Almada
 */
public class Estatistico {

	private InformacaoCiclo cicloAtual;

	private int ciclo = 1;

	public Estatistico(Set<AbstractCriatura> criaturas) {
		int numeroPresas = 0, numeroPredadores = 0;
		for (AbstractCriatura criatura : criaturas) {
			if (criatura.isPredador()) {
				numeroPredadores++;
			} else {
				numeroPresas++;
			}
		}
		this.cicloAtual = new InformacaoCiclo(this.getCiclo(), numeroPresas, numeroPredadores);
	}

	public synchronized InformacaoCiclo cicloCompleto() {
		this.ciclo++;

		InformacaoCiclo cicloCompleto = this.cicloAtual;
		int numeroPresas = cicloCompleto.getNumeroPresas();
		int numeroPredadores = cicloCompleto.getNumeroPredadores();

		this.cicloAtual = new InformacaoCiclo(this.ciclo, numeroPresas, numeroPredadores);

		return cicloCompleto;
	}

	public synchronized int getCiclo() {
		return this.ciclo;
	}

	public synchronized void registrarNascimento(AbstractCriatura criatura) {
		if (criatura.isPredador()) {
			this.cicloAtual.numeroPredadores++;
		} else {
			this.cicloAtual.numeroPresas++;
		}
	}

	public synchronized void registrarMorte(AbstractCriatura criatura) {
		if (criatura.isPredador()) {
			this.cicloAtual.numeroPredadores--;
		} else {
			this.cicloAtual.numeroPresas--;
		}
	}

}
